// 执行上下文的角度， var/let  融合
function foo() {
    var a = 1;
    let b = 2;
    { //对于 {} 包裹的块级作用域（if/for/ 独立块），引擎不会创建新的执行上下文，
    // 但会在「当前执行上下文的词法环境链」中临时压入一个块级词法环境，块执行完后立即弹出 —— 这也是「栈式管理」的体现（临时入栈、用完出栈）。
        let b = 3; // 维护一个栈
        var c = 4;
        let d = 5;
        console.log(a);
        console.log(b);
    }
    console.log(a);
    console.log(b);
    console.log(c);
    console.log(d);
}

foo();